<!DOCTYPE html>
<html lang="zh-CH" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="" />
	
	
	
	<title>Unity官方文档翻译之准备 assetbundle 资源 ｜ zansimple</title>
	
    
    
    <meta name="description" content="前言 你可以将任何资源分配给任何你想要的 AssetBundle,这是你的自由。但是当你打包的时候这里有一些策略你可以考虑一下，你可以从下面的这些分组策略中找到一种或多种去使用在你自己的项目中。
正文 逻辑实体分组 逻辑实体分组策略是：当你分配 AssetBundle 资产的时候，这些资产在项目中代表了某部分的功能（这些包括UI界面，角色，游戏环境还有任何一个在生命周期中频繁调用的部分） example :
 把UI界面上的布局信息和所有的纹理打包到一起 把角色的模型和动画信息打包到一起 把需要在多个场景中共享的模型或者纹理打包到一起  逻辑实体分组对于可下载内容（DLC）是个理想的解决方案，这样就可以将所有的东西分隔开，当你对单个实体进行更改的时候，就不需要下载额外的，不变的资产了 想要正确的使用这个方案，开发人员想要将资产分配给各自的 AssetBundle 包，那就必须要求开发人员对整个项目的每一个使用到资产的地方都要很清楚的知道。
类型分组 类型分组就是将类型相似的资产打包到一起，比如：音频文件和语言本地化文件 类型分组对于跨平台开发是个较好的策略，比如：你的音频的压缩方式在 Windows 和 mac 平台之间是相同的,那么你就可以将所有的音频文件打包进一个 AssetBundle 中，并且可以重复使用。相反的在 mac 上压缩好的一个 shader 文件，在 Windows 上是不可以用的。 除此之外，如果你的纹理压缩格式，代码，预设等资产没有那么频繁的改动的话，那这个策略可以使你的 AssetBundle 可以兼容多个 Unity 版本
并行分组 并行分组就是讲那些需要同时使用和加载的资产打包到一起，你可能会想到游戏中的一个关卡中包含了该关卡独有的角色，纹理，音频等，这个策略就是将这些东西打包到一起。你必须确定在 assetbundle 中的某个资产，只能和这个 assetbundle 中的其他资产一起使用。在并行分组策略中对于单体的依赖会加载的时间明显增加，因为这会强制加载被依赖的那个文件所在的整个 assetbundle 包。比如：assetbundle A 依赖于assetBundle B 中的某个资产 ，那么在你加载 Assetbundle A 的同时 assetBundle B 也会被强制加载这样就会需要更多的加载时间。 并行开发最常见的例子就是打包整个场景的资产。在这个策略中一个场景包中应该包含大部分或者全部场景的依赖。
小结 请注意：一个项目中肯定可以根据你的需要混合使用这些策略，根据项目的需要使用最优化的资产打包策略，这样大大提高了项目的开发效率。 比如：项目中将UI界面在不同的平台上打包到不同的 assetbundle 中，而不是场景或者关卡中有交互的内容打包到一起
不管你用什么样的策略，这里有一些额外的小建议：
 将频繁调用的和那些计划不调用的资产打进不同的包中 将可能会同时加载的资源（model，materials，textures，animations）打进一个包中 如果一个 assetbundle 中的某些资源对另一个 assetbundle 有依赖，并且其他的 assetbundle 也对这个 assetbundle 有依赖的话，那么可以将那些被依赖的资源提取出来打进一个 assetbundle 中作为共享资产来使用 如果两组对象不可能同时加载，比如标准画质和高清画质，确保它们在自己的 assetbundle 包中 如果超过50%的 bundle 在同一时间被频繁加载的话，你可以考虑将他们分割出来 如果有较少的资产（5到10个）需要经常同时加载，你可以考虑将它们打包到一起 如果一组对象只是同一对象的不同版本，则考虑使用 assetbundle 中的变量  " />
    

    

	
    
    <link rel="shortcut icon" href="https://lenzan.github.io/images/favicon.ico" />

    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/normalize.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/animate.css@4.1.0/animate.min.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/zozo.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="https://cdn.jsdelivr.net/npm/remixicon@2.5.0/fonts/remixicon.css" />
    <link rel="stylesheet" type="text/css" media="screen" href="https://lenzan.github.io/css/highlight.css" />

    
    
</head>

<body>
    <div class="main animate__animated animate__fadeInDown">
        <div class="nav_container animated fadeInDown">
    <div class="site_nav" id="site_nav">
        <ul>
            
            <li>
                <a href="/">首页</a>
            </li>
            
            <li>
                <a href="/">unity</a>
            </li>
            
            <li>
                <a href="/">归档</a>
            </li>
            
            <li>
                <a href="/">关于</a>
            </li>
            
        </ul>
    </div>
    <div class="menu_icon">
        <a id="menu_icon"><i class="ri-menu-line"></i></a>
    </div>
</div>
        <div class="header animated fadeInDown">
    <div class="site_title_container">
        <div class="site_title">
            <h1>
                <a href="https://lenzan.github.io/">
                    <span>zansimple</span>
                    <img src="https://lenzan.github.io/images/logo.svg" />
                </a>
            </h1>
        </div>
        <div class="description">
            <p class="sub_title">专注于Unity虚拟现实开发，游戏开发</p>
            <div class="my_socials">
                
                <a href="https://lenzan.github.io/index.xml" type="application/rss+xml" title="rss" target="_blank"><i
                        class="ri-rss-fill"></i></a>
            </div>
        </div>
    </div>
</div>
        <div class="content">
            <div class="post_page">
                <div class="post animate__animated animate__fadeInDown">
                    <div class="post_title post_detail_title">
                        <h2><a href='/posts/assetbundle/preparing-assets-for-assetbundle/'>Unity官方文档翻译之准备 assetbundle 资源</a></h2>
                        <span class="date">2018.05.22</span>
                    </div>
                    <div class="post_content markdown"><h2 id="前言">前言</h2>
<p>你可以将任何资源分配给任何你想要的 AssetBundle,这是你的自由。但是当你打包的时候这里有一些策略你可以考虑一下，你可以从下面的这些分组策略中找到一种或多种去使用在你自己的项目中。</p>
<h2 id="正文">正文</h2>
<h3 id="逻辑实体分组">逻辑实体分组</h3>
<p>逻辑实体分组策略是：当你分配 AssetBundle 资产的时候，这些资产在项目中代表了某部分的功能（这些包括UI界面，角色，游戏环境还有任何一个在生命周期中频繁调用的部分）
example :</p>
<ol>
<li>把UI界面上的布局信息和所有的纹理打包到一起</li>
<li>把角色的模型和动画信息打包到一起</li>
<li>把需要在多个场景中共享的模型或者纹理打包到一起</li>
</ol>
<p>逻辑实体分组对于可下载内容（DLC）是个理想的解决方案，这样就可以将所有的东西分隔开，当你对单个实体进行更改的时候，就不需要下载额外的，不变的资产了
想要正确的使用这个方案，开发人员想要将资产分配给各自的 AssetBundle 包，那就必须要求开发人员对整个项目的每一个使用到资产的地方都要很清楚的知道。</p>
<h3 id="类型分组">类型分组</h3>
<p>类型分组就是将类型相似的资产打包到一起，比如：音频文件和语言本地化文件
类型分组对于跨平台开发是个较好的策略，比如：你的音频的压缩方式在 Windows 和 mac 平台之间是相同的,那么你就可以将所有的音频文件打包进一个 AssetBundle 中，并且可以重复使用。相反的在 mac 上压缩好的一个 shader 文件，在 Windows 上是不可以用的。
除此之外，如果你的纹理压缩格式，代码，预设等资产没有那么频繁的改动的话，那这个策略可以使你的 AssetBundle 可以兼容多个 Unity 版本</p>
<h3 id="并行分组">并行分组</h3>
<p>并行分组就是讲那些需要同时使用和加载的资产打包到一起，你可能会想到游戏中的一个关卡中包含了该关卡独有的角色，纹理，音频等，这个策略就是将这些东西打包到一起。你必须确定在 assetbundle 中的某个资产，只能和这个 assetbundle 中的其他资产一起使用。在并行分组策略中对于单体的依赖会加载的时间明显增加，因为这会强制加载被依赖的那个文件所在的整个 assetbundle 包。比如：assetbundle A 依赖于assetBundle B 中的某个资产 ，那么在你加载 Assetbundle A 的同时 assetBundle B 也会被强制加载这样就会需要更多的加载时间。
并行开发最常见的例子就是打包整个场景的资产。在这个策略中一个场景包中应该包含大部分或者全部场景的依赖。</p>
<h3 id="小结">小结</h3>
<p>请注意：一个项目中肯定可以根据你的需要混合使用这些策略，根据项目的需要使用最优化的资产打包策略，这样大大提高了项目的开发效率。
比如：项目中将UI界面在不同的平台上打包到不同的 assetbundle 中，而不是场景或者关卡中有交互的内容打包到一起</p>
<p>不管你用什么样的策略，这里有一些额外的小建议：</p>
<ol>
<li>将频繁调用的和那些计划不调用的资产打进不同的包中</li>
<li>将可能会同时加载的资源（model，materials，textures，animations）打进一个包中</li>
<li>如果一个 assetbundle 中的某些资源对另一个 assetbundle 有依赖，并且其他的 assetbundle 也对这个 assetbundle 有依赖的话，那么可以将那些被依赖的资源提取出来打进一个 assetbundle 中作为共享资产来使用</li>
<li>如果两组对象不可能同时加载，比如标准画质和高清画质，确保它们在自己的 assetbundle 包中</li>
<li>如果超过50%的 bundle 在同一时间被频繁加载的话，你可以考虑将他们分割出来</li>
<li>如果有较少的资产（5到10个）需要经常同时加载，你可以考虑将它们打包到一起</li>
<li>如果一组对象只是同一对象的不同版本，则考虑使用 assetbundle 中的变量</li>
</ol>
</div>
                    <div class="post_footer">
                        
                        <div class="meta">
                            <div class="info">
                                <span class="field tags">
                                    <i class="ri-stack-line"></i>
                                    
                                    <a href="https://lenzan.github.io/tags/Unity3D/">Unity3D</a>
                                    
                                    <a href="https://lenzan.github.io/tags/AssetBundle/">AssetBundle</a>
                                    
                                </span>
                            </div>
                        </div>
                        
                    </div>
                </div>
                
                
            </div>
        </div>
    </div>
    <a id="back_to_top" href="#" class="back_to_top"><span>△</span></a>
    <footer class="footer">
    <div class="powered_by">
        <a href="https://varkai.com">Designed by VarKai,</a>
        <a href="http://www.gohugo.io/">Proudly published with Hugo</a>
    </div>

    <div class="footer_slogan">
        <span></span>
    </div>
</footer>
    <script src="https://lenzan.github.io/js/jquery-3.5.1.min.js"></script>
<link href="https://lenzan.github.io/css/fancybox.min.css" rel="stylesheet">
<script src="https://lenzan.github.io/js/fancybox.min.js"></script>
<script src="https://lenzan.github.io/js/zozo.js"></script>






</body>

</html>